<?php

App::uses('PrivadoController', 'Controller');

function pagoOk($recuperacion)
{
    return $recuperacion['recuperacion']['pago_exitoso'];
}

function pagoError($recuperacion)
{
    return !$recuperacion['recuperacion']['pago_exitoso'];
}

class ReportesController extends PrivadoController
{

    public function BuscarRfc()
    {
        $this->set('title', 'Consultas');
        $this->set('description', 'Consulta el estado de cuenta de un tercero
            usando el <abbr title="Registro federal de contribuyentes">R.F.C.</abbr>');
    }

    public function EstadoDeCuenta()
    {
        $this->loadModel('Recuperacion');
        $this->loadModel('Credito');
        $user = $this->Auth->user();
        $rfc = $user['user'];
        if ($this->request->is('post'))
        {
            $rfc = $this->request->data['ConsultaEstadoDeCuenta']['rfc'];
        }
        $rfcHomoclave = $rfc . '000';
        $credito = $this->Credito->findByRfc($rfcHomoclave);
        $prestamos = $this->Credito->getCreditosVigentesByRfc($rfcHomoclave);
        $recuperaciones = $this->Recuperacion->getByRfc($rfc);
        $rec2 = array();
        $prestamoVigente = false;
        $prestamoMultiple = false;
        $tituloRecuperaciones = 'Recuperaciones';
        if (count($prestamos) == 1)
        {
            $prestamoVigente = true;
            $credito = $credito['Credito'];
            if (isset($credito['fecha_instrumento']) === true)
            {
                try
                {
                    $fechaInstrumento = new DateTime($credito['fecha_instrumento']);
                    foreach ($recuperaciones as $key => $recuperacion)
                    {
                        $fechaCargo = new DateTime($recuperacion['recuperacion']['d']);
                        if ($fechaCargo > $fechaInstrumento)
                        {
                            $rec2[] = $recuperacion;
                        }
                    }
                }
                catch (Exception $exc)
                {
                    $rec2 = $recuperaciones;
                }
            }
            else
            {
                $rec2 = $recuperaciones;
            }
            $pagosOk = (count(array_filter($rec2, 'pagoOk')));
            $pagosError = (count(array_filter($rec2, 'pagoError')));
            $usuario['Nombre'] = $credito['paterno'] . ' ' . $credito['materno'] . ' ' . $credito['nombre'];
            $usuario['Folio prestamo'] = $credito['folio'];
            $usuario['Pago mensual'] = '$' . number_format($credito['pago_mensual'], 2, '.', ',');
            $usuario['R.F.C.'] = $rfc;
            $usuario['Importe prestamo'] = '$' . number_format($credito['monto_original'], 2, '.', ',');
            $usuario['Pagos realizados'] = $pagosOk + $pagosError;
            $usuario['Pagos correctos'] = $pagosOk;
            $usuario['Pagos con error'] = $pagosError;
            $usuario['No. de cuenta'] = $credito['cuenta_bancaria'];
            $usuario['Monto total a pagar'] = '$' . number_format($credito['total_pago'], 2, '.', ',');
            $usuario['Interes mensual'] = '1.00%';
            $usuario['Delegacion'] = $credito['delegacion'];
            $usuario['Plazo'] = $credito['plazo'];
            $usuario['Mes inicio'] = isset($rec2[0]) ? $rec2[0][0]['dateLong'] : '-';
            $this->set('usuario', $usuario);
        }
        else
        {
            $rec2 = $recuperaciones;
            if (count($prestamos) > 1)
            {
                $this->set('prestamos', $prestamos);
                $prestamoMultiple = true;
                $prestamoVigente = true;
            }
            $tituloRecuperaciones = 'Historico de recuperaciones';
        }
        $rec2 = $this->insertLiquidaciones($rec2);
        $sinRegistros = count($rec2) == 0;
        $this->set('tituloRecuperaciones', $tituloRecuperaciones);
        $this->set('prestamoMultiple', $prestamoMultiple);
        $this->set('sinRegistros', $sinRegistros);
        $this->set('prestamoVigente', $prestamoVigente);
        $this->set('recuperaciones', $rec2);
        $this->set('title', 'Estado de cuenta');
        $this->set('description', 'Consulta el estado de tu cuenta de préstamo y ahorro.');
    }

    private function insertLiquidaciones($recuperaciones)
    {
        $rec2 = array();
        $total = 0;
        $ok = 0;
        $error = 0;
        foreach ($recuperaciones as $key => $recuperacion)
        {
            if ($key == 0)
            {
                $mesAnteriorAbsoluto = $recuperacion[0]['mes_absoluto'];
            }
            $mesAbsoluto = $recuperacion[0]['mes_absoluto'];
            if ($mesAbsoluto - $mesAnteriorAbsoluto > 1)
            {
                $rec2[] = array('break' => true, 'total' => $total, 'ok' => $ok,
                    'error' => $error);
                $total = 0;
                $ok = 0;
                $error = 0;
            }
            $mesAnteriorAbsoluto = $mesAbsoluto;
            if ($recuperacion['recuperacion']['pago_exitoso'] === true)
            {
                $total += $recuperacion['recuperacion']['monto'];
                $ok++;
            }
            else
            {
                $error++;
            }
            $rec2[] = $recuperacion;
        }
        return $rec2;
    }

}
